package com.strive.common.result;

import lombok.Data;

import java.io.Serializable;

/**
 * @Author: strivePeng
 * @CreateTime: 2024年03月15日
 * @Description: 对该类的描述（该类的功能）
 **/

/**
 * 统一封装一个结果类
 * 用于异步返回一个结果，主要包括
 * 是否成功 状态码
 * 结果消息
 * 结果数据
 */
@Data
public class Result implements Serializable {
    private int code; // 状态码
    private String msg; // 返回的消息
    private Object data; // 返回的数据 可以使用泛型定义

    /**
     * 定义一个返回消息的方法
     */
    private static Result success(int code, String msg, Object data) {
        Result r = new Result();
        r.setCode(code);
        r.setMsg(msg);
        r.setData(data);

        return r;
    }

    /*
     * 成功时返回的消息模板
     **/
    public static Result success(Object data) {
        /**
         * Object 是一个基础类，它是Java中所有类的超类。这意味着任何Java对象都可以被传递给一个期望 Object 类型参数的方法。
         * 方法签名 public static Result success(Object data) 表示这个方法接受一个类型为 Object 的参数。
         * 由于 Object 是所有Java类的根，所以你可以传递任何类型的对象给这个方法，例如 String、Integer、Double、自定义类的实例等。
         */
        return success(200, "操作成功！", data);
    }

    /**
     * 失败是返回消息
     */
    public static Result fail(int code, String msg, Object data) {
        Result r = new Result();
        r.setCode(code);
        r.setMsg(msg);
        r.setData(data);

        return r;
    }

    public static Result fail(String msg) {
        return fail(400, msg, null);
    }
}
